package com.leo.boot.feature.merge;

import java.lang.annotation.*;
import java.math.BigDecimal;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.TYPE;

@Target({TYPE, FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Merging {

    /**
     * 合并操作
     *
     * @scope {@link ElementType#FIELD field}
     */
    String[] op() default "add";

    /**
     * 为null指定默认值
     *
     * @scope {@link ElementType#FIELD field}
     */
    String nil() default "";

    /**
     * 判断是否合并
     *
     * @scope {@link ElementType#FIELD field}
     */
    String test() default "";

    /**
     * 是否忽略
     *
     * @scope {@link ElementType#FIELD field}
     */
    boolean ignore() default false;

    /**
     * 合并前操作
     *
     * @scope {@link ElementType#TYPE type}
     */
    String pre() default "";

    /**
     * 合并后操作
     *
     * @scope {@link ElementType#TYPE type}
     */
    String post() default "";

    /**
     * 引入需要的工具类
     *
     * @scope {@link ElementType#FIELD field}, {@link ElementType#TYPE type}
     */
    Class<?>[] utils() default {};

    /**
     * 支持的类型
     *
     * @scope {@link ElementType#TYPE type}
     */
    Class<?>[] supported() default BigDecimal.class;

    /**
     * 适用范围
     *
     * @scope {@link ElementType#TYPE type}
     */
    Scope scope() default Scope.SUPPORTED;

    enum Scope {
        EXPLICIT, SUPPORTED
    }
}
